#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Size 5;
typedef struct Table{
    int *head;
    int lenght;
    int size;
}Table;
Table iniTable(){
    Table t;
    t.head=malloc(5*sizeof(int ));
    if(t.head==NULL){
        printf("初始化失败");
        exit(0);
    }
    t.lenght=0;
    t.size=Size;
    return t;
}
void displayTable(Table t){
    for(int i=0;i<t.lenght;i++){
        printf("%d\n",t.head[i]);
    }
}
//删除元素
Table delTable(Table t,int num){
    //t代表函数调用时传来的顺序表，num代表元素的位置
    if(num>t.lenght||num<1){
        printf("被删除元素的位置有问题\n");
        return t;
    }
    //当元素位置没有问题
    for(int i=num;i<t.lenght;i++){
        t.head[i-1]=t.head[i];
    }
    t.lenght--;
    return t;

}
Table addTable(Table t,int n,int m){
    if(t.lenght>=t.size){
        t.head=realloc(t.head,(t.size+1)*sizeof(int) );
    }
    if(n>t.lenght||n<1){
        printf("被删除元素的位置有问题\n");
        return t;
    }
    if(!t.head){
        printf("分配失败");
    }
    //空间容量
    t.size++;
    for(int i=t.lenght-1;i>=n-1;i--){
        t.head[i+1]=t.head[i];
    }
    t.head[n-1] = m;
    t.lenght++;
    return t;
}
//查找对应位置的元素
Table font(Table t,int a){
    printf("%d位置的编号是：%d",a,t.head[a-1]);
    return t;
}
//修改对应位置的元素
Table alter(Table t,int a,int l){
    t.head[a-1]=l;
    return t;
}
int main() {
    int a;
    Table t1=iniTable();
    for(int i=0;i<5;i++){
        t1.head[i]=i;
        t1.lenght++;
    }
    printf("打印原顺序表：\n");
    displayTable(t1);
    printf("删除元素");
    fflush(stdout);
    scanf("%d",&a);
    t1 = delTable(t1,a);
    displayTable(t1);
    int b,c;
    printf("输入要插入的位置和元素");
    fflush(stdout);
    scanf("%d%d",&b,&c);
    printf("插入元素");
    t1=addTable(t1,b,c);//b代表查找的位置，c代表插入的元素
    displayTable(t1);
    int m;
    printf("请输入你要查找的位置");
    fflush(stdout);
    scanf("%d",&m);//m代表查找的位置
    font(t1,m);
    int k,l;

    printf("请输入你要修改元素的位置");
    fflush(stdout);
    scanf("%d%d",&k,&l);//k代表位置，l代表修改值
    printf("修改之后的表");
    t1= alter(t1,k,l);
    displayTable(t1);
    return 0;
}
